package ld.oauth.blog.service.question;

import com.baomidou.mybatisplus.extension.service.IService;
import ld.oauth.blog.model.bo.QuestionBo;
import ld.oauth.blog.model.bo.ReplyBo;
import ld.oauth.blog.model.po.question.Question;
import ld.oauth.blog.model.qo.QuestionQo;
import ld.oauth.blog.model.vo.QuestionDetail;
import ld.oauth.blog.model.vo.ReplyVo;
import ld.oauth.blog.utils.PageResult;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author ld
 * @since 2022-09-25
 */
public interface QuestionService extends IService<Question> {

    /**
     * 新增或编辑问题
     * @param questionBo
     * @return
     */
    Integer insertOrUpdate(QuestionBo questionBo);

    /**
     * 根据问题id查询文章详情
     * @param id
     * @return
     */
    QuestionDetail questionDetailById(Integer id);

    /**
     * 分页条件查询最热问题
     * @param questionQo
     * @return
     */
    PageResult<QuestionDetail> hot(QuestionQo questionQo);

    /**
     * 分页条件查询最新问题
     * @param questionQo
     * @return
     */
    PageResult<QuestionDetail> veryNew(QuestionQo questionQo);

    /**
     * 分页条件查询等待回答问题
     * @param questionQo
     * @return
     */
    PageResult<QuestionDetail> wait(QuestionQo questionQo);

    /**
     * 更新问题浏览数
     * @param id
     */
    void updateArticleViewCountById(Integer id);

    /**
     * 更新问题点赞数
     * @param questionId
     * @param count
     */
    void updateArticleThumbById(Integer questionId, Integer count);

    /**
     * 新增或修改问题的回答
     * @param replyBo
     * @return
     */
    boolean insertOrUpdateQuestionReplay(ReplyBo replyBo);

    /**
     * 根据问题id获取问题的所有回答
     * @param questionId
     * @return
     */
    List<ReplyVo> getQuestionReplayById(Integer questionId);

    /**
     * 根据标签id分页查询问题列表
     * @param questionQo
     * @return
     */
    PageResult<QuestionDetail> queryQuestionByLabelId(QuestionQo questionQo);
}
